package com.miage.kangourou.client.calendar;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.miage.kangourou.client.GetListesService;
import com.miage.kangourou.client.GetListesServiceAsync;
import com.miage.kangourou.client.beans.Enseignant;
import com.miage.kangourou.client.beans.Groupe;
import com.miage.kangourou.client.beans.Matiere;
import com.miage.kangourou.client.beans.Salle;

public class RechercheMultiCritereWidget extends GenericWidget {

	private final GetListesServiceAsync getListesService = GWT
	.create(GetListesService.class);

	private VerticalPanel adminPanel = new VerticalPanel();
	private Grid grid = new Grid(9, 1);
	private ListBox groupeComboBox = new ListBox();
	private ListBox enseignantComboBox = new ListBox();
	private ListBox salleComboBox = new ListBox();
	private ListBox matiereComboBox = new ListBox();
	private Label labelGroupe = new Label("Groupe : ");
	private Label labelEnseignant = new Label("Enseignant : ");
	private Label labelSalle = new Label("Salle : ");
	private Label labelUe = new Label("UE : ");

	private Button btnNewButton = new Button("Afficher");

	public RechercheMultiCritereWidget(KangourouPanel context) {
		super(context, "admin");
	}

	public Widget createWidget() {
		adminPanel.setSize("100%", "20%");
		adminPanel.setStyleName("bold");
		adminPanel.add(grid);
		groupeComboBox.setTitle("Groupe");
		enseignantComboBox.setTitle("Enseignant");
		salleComboBox.setTitle("Salle");
		matiereComboBox.setTitle("UE");
		groupeComboBox.setStyleName("listBox");
		enseignantComboBox.setStyleName("listBox");
		salleComboBox.setStyleName("listBox");
		matiereComboBox.setStyleName("listBox");
		grid.setWidth("50%");
		grid.setWidget(0, 0, labelSalle);
		grid.setWidget(1, 0, salleComboBox);
		grid.setWidget(2, 0, labelGroupe);
		grid.setWidget(3, 0, groupeComboBox);
		grid.setWidget(4, 0, labelUe);
		grid.setWidget(5, 0, matiereComboBox);
		grid.setWidget(6, 0, labelEnseignant);
		grid.setWidget(7, 0, enseignantComboBox);
		grid.setWidget(8, 0, btnNewButton);

		// liste par defaut

		enseignantComboBox.addItem("-", "-1");
		matiereComboBox.addItem("-", "-1");
		salleComboBox.addItem("-", "-1");
		groupeComboBox.addItem("-", "-1");

		// chargement des Listes

		final AsyncCallback<List<Groupe>> listeGroupe = new AsyncCallback<List<Groupe>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());
			}

			public void onSuccess(List<Groupe> result) {
				for (Groupe groupe : result) {
					groupeComboBox.addItem(groupe.getIntitule(),
							String.valueOf(groupe.getId_groupe()));
				}

			}
		};

		final AsyncCallback<List<Salle>> listeSalle = new AsyncCallback<List<Salle>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());

			}

			public void onSuccess(List<Salle> result) {
				for (Salle salle : result) {
					salleComboBox.addItem(salle.getIntitule(),
							String.valueOf(salle.getId_salle()));
				}
			}
		};

		final AsyncCallback<List<Matiere>> listeMatieres = new AsyncCallback<List<Matiere>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());
			}

			@Override
			public void onSuccess(List<Matiere> result) {
				for (Matiere matiere : result) {
					matiereComboBox.addItem(matiere.getIntitule(),
							String.valueOf(matiere.getId_matiere()));
				}
			}
		};

		final AsyncCallback<List<Enseignant>> listeProfs = new AsyncCallback<List<Enseignant>>() {

			public void onFailure(Throwable caught) {
				Window.alert("Erreur lors de l'appel serveur "
						+ caught.getMessage());
			}

			public void onSuccess(List<Enseignant> result) {
				for (Enseignant enseignant : result) {
					enseignantComboBox.addItem(enseignant.getNom(),
							String.valueOf(enseignant.getId_enseignant()));
				}
			}
		};

		getListesService.getGroupeList(listeGroupe);
		getListesService.getEnseignantList(listeProfs);
		getListesService.getSalleList(listeSalle);
		getListesService.getMatiereList(listeMatieres);

		btnNewButton.addClickHandler(new ClickHandler() {

			
			@Override
			public void onClick(ClickEvent event) {

				((CalendarWidget)context.getWidget("calendar")).update();

			}
		});

		return adminPanel;
	}

	public void configureWidget() {

	}


	public int getGroupeSelected() {
		return Integer
		.valueOf(groupeComboBox.getValue(groupeComboBox
				.getSelectedIndex()));
	}
public int getEnseignantSelected(){
	return Integer
	.valueOf(enseignantComboBox.getValue(enseignantComboBox
			.getSelectedIndex()));
	}
public int getSalleSelected(){
	return Integer
	.valueOf(salleComboBox.getValue(salleComboBox
			.getSelectedIndex()));
}
public int getMatiereSelected(){
	return Integer
	.valueOf(matiereComboBox.getValue(matiereComboBox
			.getSelectedIndex()));
}


	
}
